GNU LilyPond

GNU LilyPond
Original author(s) Han-Wen Nienhuys, Jan Nieuwenhuizen
Developer(s) LilyPond development team[1]
Initial release 1996 (1996)
Stable release 2.14.2  (July 26, 2011; 6 months ago (2011-07-26))[2] [±]
Preview release 2.15.22  (December 15, 2011; 2 months ago (2011-12-15))[3] [±]
Development status Active
Written in Scheme, C++, Metafont, PostScript, Python
Operating system Cross-platform
Size 20MB, 100MB including documentation
Available in Dutch, English, French, German, Japanese, Spanish, Hungarian, Italian
Type application programs, music software, music engraving, scorewriter
License GPL
Website http://lilypond.org/
Standard(s) MusicXML, SVG

GNU LilyPond is a computer program for music engraving. One of LilyPond's major goals is to produce scores that are engraved with traditional layout rules, reflecting the era when scores were engraved by hand.

LilyPond is cross-platform, and is available for several common operating systems; released under the terms of the GNU General Public License, LilyPond is free software.

Contents

History

The LilyPond project was started in 1996 by Han-Wen Nienhuys and Jan Nieuwenhuizen, after they decided to abandon work on MPP (MusiXTeX PreProcessor), a project they began collaborating on in 1995.[4][5]

Version 1.0

LilyPond 1.0 was released on July 31, 1998, highlighting the development of a custom music font, Feta, and the complete separation of LilyPond from MusiXTeX.[6]

Version 2.0

LilyPond 2.0 was released on September 24, 2003, announcing a simplified syntax model and a much more complete set of facilities for notating various styles of music.[7]

Design

LilyPond is mostly written in C++ and uses Scheme (interpreted by GNU Guile) as its extension language, allowing for user customization.[8] It has a relatively large codebase; as of February 2010, the source comprises over 68,000 lines of C++ and 23,000 lines of Scheme code.[9]

It uses a simple text notation for music input, which LilyPond interprets and processes in a series of stages.[10] In the final stage, music notation is output to PDF (via PostScript) or other graphical formats, such as SVG or PNG. LilyPond also has the facility to generate MIDI files that correspond to the music notation output.

LilyPond is a text-based application, so it does not contain its own graphical user interface to assist with score creation. It does, however, have a flexible input language that strives to be simple, easing the learning curve for new users. LilyPond adheres to the WYSIWYM paradigm; the workflow for typesetting music notation with LilyPond is similar to that of preparing documents with LaTeX.

Software features

LilyPond's primary goal is to produce output comparable to professionally-engraved scores instead of output that looks mechanical and computer-generated. An essay from the LilyPond website, written by LilyPond developers, explains some typographical issues addressed by LilyPond:[11]

Overview of input syntax

The native input language for LilyPond is comprehensive, consisting of many commands needed for expressing any sort of articulation, dynamic, meter, etc. The ability to embed Scheme code within a LilyPond source file permits arbitrary extensions to the input language and assists with algorithmic composition. Some general syntactic features are listed below.

LilyPond's interface with Pango requires the input character encoding to be UTF-8.[18] One benefit of this is that more than one language can be included in the same source file.

Example of LilyPond input file

\version "2.15.14"
 
\include "english.ly"
 
\header {
  title = \markup { "Excerpt from" \italic "fibonacci" }
  composer = "Patrick McCarty"
  %copyright =
  %  \markup \fontsize #-5 {
  %    Copyright © 2009.
  %    Typeset with GNU LilyPond.
  %    Released into public domain by the composer.
  %  }
}
 
\paper {
  paper-height = 4.6\in
  paper-width = 8.5\in
  indent = #0
  system-count = #2
}
 
\score {
  \new PianoStaff = "pianostaff" <<
    \new Staff = "RH" \relative c' {
      #(set-accidental-style 'piano 'Score)
      \clef "treble"
      \time 2/4
      \set Score.currentBarNumber = #51
      \tempo "Slow and steady" 4 = 60
      <e gs,>4 \acciaccatura { cs16[ ds] } <e gs,>4 | % m. 51
      <ds gs,>4 \acciaccatura { e16[ ds] } <cs gs>4 | % m. 52
      <cs gs>4 \acciaccatura { ds16[ cs] } <c g>4  | % m. 53
      <cs gs>4 \acciaccatura { ds16[ e] } <es bs gs>4 | % m. 54
 
      <e gs,>4 \acciaccatura { cs16[ ds] } e16 f gs a | % m. 55
      <gs c,>8 \acciaccatura { as16[ gs] }
      <es b>8 ~ <es b>16 ds b as | % m. 56
 
      b16 d8 bf32 f' g16 af bf c | % m. 57
      <df df,>16 ( c af ) <e' e,> ( ds b ) <g' g,> ( ds | % m. 58
 
      \time 3/4
      <gs gs,>16 ) \noBeam d,16 f gs
      a16 e f b
      c16 d, ( f gs | % m. 59
 
      a16 b ) e, ( f
      gs16 b c ) f, (
      gs16 as b c ) | % m. 60
    }
 
    \new Dynamics = "Dynamics_pf" {
      s4 \p \< s4 | % m. 51
      s4 s4 | % m. 52
      s4 \mp \> s4 | % m. 53
      s4 s4 \! | % m. 54
      s4 \p s4 | % m. 55
      s1 * 2/4 | % m. 56
      s4 \< s4 | % m. 57
      s4 s4 | % m. 58
      \override DynamicText #'extra-spacing-width = #'(-0.75 . 0.75)
      s16 \mf s16 \p s8 s4 s4 | % m. 59
      s2. | % m. 60
    }
 
    \new Staff = "LH" \relative c, {
      \clef "bass"
      \time 2/4
      cs4. cs8 | % m. 51
      cs4. d8 | % m. 52
      f4. a8 | % m. 53
      f4. d8 | % m. 54
 
      cs4. cs8 | % m. 55
      d4 ds | % m. 56
      gs4. bf,8 | % m. 57
      f'4 b, | % m. 58
 
      \time 3/4
      d4. d8 ~ d4 | % m. 59
      ef2 f4 | % m. 60
    }
  >>
}

Corresponding output

Collaboration with other projects

Several graphical scorewriters; such as Rosegarden, MuseScore, NoteEdit, Canorus, Denemo, and TuxGuitar; can export files directly to LilyPond format. Other graphical applications serve as front ends to LilyPond, including Frescobaldi and the LilyPondTool plugin for jEdit.

The Mutopia Project, which distributes free content sheet music, uses LilyPond to typeset its music, as does Musipedia, a collaborative music encyclopedia. WikiTeX, a MediaWiki interface, supports editing LilyPond notation directly in wiki articles.

Emacs' org-mode contains support for embedding LilyPond scores into documents.[19]

Comparison to other scorewriters

Finale and Sibelius are two proprietary scorewriters often compared to LilyPond. One LilyPond user wrote a series of articles comparing output quality between Finale and LilyPond.[20]

Another scorewriter with comparable features to LilyPond is SCORE.

See also

References

  1. ^ "Authors". LilyPond Development team. http://lilypond.org/doc/v2.15/Documentation/web/authors. Retrieved 2010-02-16. 
  2. ^ Percival, Graham (2011-07-26). "LilyPond 2.14.2 released". info-lilypond mailing list. http://lists.gnu.org/archive/html/info-lilypond/2011-07/msg00002.html. Retrieved 2011-07-30. 
  3. ^ Percival, Graham (2011-12-16). "LilyPond 2.15.22 released". info-lilypond mailing list. http://lists.gnu.org/archive/html/info-lilypond/2011-12/msg00001.html. Retrieved 2011-12-16. 
  4. ^ "GNU LilyPond Learning Manual: Preface". http://lilypond.org/doc/v2.12/Documentation/user/lilypond-learning/Preface. Retrieved 2010-02-16. 
  5. ^ "MusiXTeX PreProcessor README". http://github.com/janneke/mpp. Retrieved 2010-03-31. 
  6. ^ Nienhuys, Han-Wen (1998-07-31). "GNU LilyPond 1.0 released". gnu-music-discuss mailing list. http://www.mail-archive.com/gnu-music-discuss@gnu.org/msg00313.html. Retrieved 2010-02-16. 
  7. ^ Nienhuys, Han-Wen (2003-09-24). "LilyPond 2.0 - make beautiful music prints". info-lilypond mailing list. http://lists.gnu.org/archive/html/info-lilypond/2003-09/msg00008.html. Retrieved 2010-02-16. 
  8. ^ "LilyPond programming languages". http://lilypond.org/doc/v2.13/Documentation/contributor/lilypond-programming-languages. Retrieved 2010-02-15. 
  9. ^ "GNU LilyPond Music Typesetter - Code Analysis". http://www.ohloh.net/p/lilypond/analyses/latest. Retrieved 2010-02-16. 
  10. ^ "Overview of LilyPond architecture". http://lilypond.org/doc/v2.13/Documentation/contributor/overview-of-lilypond-architecture. Retrieved 2010-02-15. 
  11. ^ Nienhuys, Han-Wen; Nieuwenhuizen, Jan. "Obsessed with putting ink on paper". http://lilypond.org/web/about/automated-engraving/. Retrieved 2010-02-15. 
  12. ^ "Strange notation". http://lilypond.org/web/switch/new-notation. Retrieved 2010-02-15. 
  13. ^ "LilyPond Learning Manual: 1.2.2 Working on input files". http://lilypond.org/doc/v2.13/Documentation/learning/working-on-input-files. Retrieved 2010-09-22. 
  14. ^ "LilyPond Notation Reference: 1.1.1 Writing pitches". http://lilypond.org/doc/v2.13/Documentation/notation/writing-pitches. Retrieved 2010-09-22. 
  15. ^ "LilyPond Notation Reference: 1.3.1 Expressive marks attached to notes". http://lilypond.org/doc/v2.13/Documentation/notation/expressive-marks-attached-to-notes#dynamics. Retrieved 2010-09-22. 
  16. ^ "LilyPond Notation Reference: 1.3.2 Expressive marks as curves". http://lilypond.org/doc/v2.13/Documentation/notation/expressive-marks-as-curves#slurs. Retrieved 2010-09-22. 
  17. ^ "LilyPond Notation Reference: 1.2.4 Beams". http://lilypond.org/doc/v2.13/Documentation/notation/beams#manual-beams. Retrieved 2010-09-22. 
  18. ^ "LilyPond Notation Reference: 3.3.3 Text encoding". http://lilypond.org/doc/v2.13/Documentation/notation/text-encoding. Retrieved 2010-09-22. 
  19. ^ github.com
  20. ^ Hawryluk, Andrew. "Finale and LilyPond". http://www.musicbyandrew.ca/finale-lilypond-1.html. Retrieved 2010-02-15. 

External links